package com.example.onlineanswer.service;

import com.example.onlineanswer.model.dto.RankingDTO;

import java.util.List;

/**
 * 竞赛排名服务接口
 * 用于处理基于Redis的实时排名
 */
public interface ContestRankingService {

    /**
     * 添加或更新用户排名
     *
     * @param contestId 竞赛ID
     * @param userId    用户ID
     * @param score     得分
     * @return 是否成功
     */
    boolean updateUserRanking(Long contestId, Long userId, int score);

    /**
     * 获取竞赛排名列表
     *
     * @param contestId 竞赛ID
     * @param start     起始排名（0开始）
     * @param end       结束排名
     * @return 排名列表
     */
    List<RankingDTO> getRankingList(Long contestId, int start, int end);

    /**
     * 获取用户排名信息
     *
     * @param contestId 竞赛ID
     * @param userId    用户ID
     * @return 用户排名信息
     */
    RankingDTO getUserRanking(Long contestId, Long userId);

    /**
     * 设置用户排名详细信息
     *
     * @param contestId  竞赛ID
     * @param userId     用户ID
     * @param nickname   用户昵称
     * @param userAvatar 用户头像
     */
    void setUserRankingInfo(Long contestId, Long userId, String nickname, String userAvatar);

    /**
     * 获取用户排名位置
     *
     * @param contestId 竞赛ID
     * @param userId    用户ID
     * @return 排名位置（从1开始）
     */
    Long getUserRank(Long contestId, Long userId);

    /**
     * 获取竞赛参与人数
     *
     * @param contestId 竞赛ID
     * @return 参与人数
     */
    Long getContestParticipantsCount(Long contestId);

    /**
     * 清除竞赛排名
     *
     * @param contestId 竞赛ID
     * @return 是否成功
     */
    boolean clearContestRanking(Long contestId);
} 